﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SIBI.Models;

namespace SIBI.Controllers
{
    [Authorize]
    public class CausaMovimientoController : Controller
    {
        private SIBIContext db = new SIBIContext();


        //***********************************************************************************//
        // Autor: Gabriel Muñumel 										     				*//
		//***********************************************************************************//
		// Index()													 						*//
		// Función que devuelve la vista de todos los ítems de Casua Movimiento listados en *//
		// la pantalla.																		*// 
		// _________________________________________________________________________________*//
		// Entrada: 			None                               							*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que posee todos las causas movimientos listados 					*//
		// _________________________________________________________________________________*//
        public ViewResult Index()
        {
            return View(db.CausaMovimientoes.ToList());
        }

		//***********************************************************************************//
        // Autor: Gabriel Muñumel 										     				*//
		//***********************************************************************************//
		// Details()	Acceso INVITADO	y ADMINISTRADOR										*//
		// Función que devuelve la vista de los detalles de una causa movimento especificada*//
		// _________________________________________________________________________________*//
		// Entrada: 																		*//
		// •	id: identificador de la causa movimento que se desea ver los detalles. 		*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que posee todos los datos de la causa movimento desada.			*//
		// _________________________________________________________________________________*//
        public ViewResult Details(int id)
        {
            CausaMovimiento causamovimiento = db.CausaMovimientoes.Find(id);
            return View(causamovimiento);
        }

		//***********************************************************************************//
        // Autor: Gabriel Muñumel										     				*//
		//***********************************************************************************//
		// Create()	Acceso solo ADMINISTRADOR												*//
		// Acción que devuelve la vista que permite crear una causa movimento especificada. *//
		// Método GET																		*//
		// _________________________________________________________________________________*//
		// Entrada: 		none															*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que posee la plantilla para crear la causa movimiento desada.		*//
		// _________________________________________________________________________________*//
        [Authorize(Roles = "Admin")]
        public ActionResult Create()
        {
            return View();
        } 

		//***********************************************************************************//
        // Autor: Gabriel Muñumel										     				*//
		//***********************************************************************************//
		// Create()	Acceso solo ADMINISTRADOR												*//
		// Acción que devuelve la vista que permite crear un causa movimiento especificado. *//
		// Método POST.																		*//
		// _________________________________________________________________________________*//
		// Entrada: 																		*//
		// •	causamovimiento: dato de tipo modelo, que representa una causamovimiento, 	*//
		//		este es requerido para verificar que los datos suministrados son correctos, *//
		//		para así crear o enviar un mensaje de error en la aplicación. 				*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que devuelve la cargocausa movimiento creada.						*//
		// _________________________________________________________________________________*//
        [Authorize(Roles = "Admin")]
        [HttpPost]
        public ActionResult Create(CausaMovimiento causamovimiento)
        {
            if (ModelState.IsValid)
            {
                db.CausaMovimientoes.Add(causamovimiento);
                db.SaveChanges();
                return RedirectToAction("Index");  
            }

            return View(causamovimiento);
        }
        
		//***********************************************************************************//
        // Autor: Gabriel Muñumel 										     				*//
		//***********************************************************************************//
		// Edit()	Acceso solo ADMINISTRADOR												*//
		// Acción que devuelve la vista que permite Editar una causa movimento especificada.*//
		// Método GET																		*//
		// _________________________________________________________________________________*//
		// Entrada: 																		*//
		// •	id: identificador de la Causa Movimiento que se desea editar.				*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que posee la plantilla para editar la causa movimiento desada.	*//
		// _________________________________________________________________________________*//
        [Authorize(Roles = "Admin")]
        public ActionResult Edit(int id)
        {
            CausaMovimiento causamovimiento = db.CausaMovimientoes.Find(id);
            return View(causamovimiento);
        }

		//***********************************************************************************//
        // Autor: Gabriel Muñumel 										     				*//
		//***********************************************************************************//
		// Edit()	Acceso solo ADMINISTRADOR												*//
		// Acción que devuelve la vista que permite editar un causa movimiento especificada.*//
		// Método POST.																		*//
		// _________________________________________________________________________________*//
		// Entrada: 																		*//
		// •	causamovimiento: dato de tipo modelo, que representa una causamovimiento, 	*//
		//		este es requerido para verificar que los datos suministrados son correctos, *//
		//		para así editar o enviar un mensaje de error en la aplicación. 				*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que devuelve la cargocausa movimiento editada.					*//
		// _________________________________________________________________________________*//
        [Authorize(Roles = "Admin")]
        [HttpPost]
        public ActionResult Edit(CausaMovimiento causamovimiento)
        {
            if (ModelState.IsValid)
            {
                db.Entry(causamovimiento).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(causamovimiento);
        }

		//***********************************************************************************//
        // Autor: Gabriel Muñumel 										     				*//
		//***********************************************************************************//
		// Delete()	Acceso solo ADMINISTRADOR												*//
		// Acción que devuelve la vista que permite eliminar  causa movimento especificada.	*//
		// Método GET																		*//
		// _________________________________________________________________________________*//
		// Entrada: 																		*//
		// •	id: identificador de la Causa Movimiento que se desea eliminar.				*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que posee la plantilla para eliminar la causa movimiento desada.	*//
		// _________________________________________________________________________________*//
        [Authorize(Roles = "Admin")]
        public ActionResult Delete(int id)
        {
            CausaMovimiento causamovimiento = db.CausaMovimientoes.Find(id);
            return View(causamovimiento);
        }

		//***********************************************************************************//
        // Autor: Gabriel Muñumel 										     				*//
		//***********************************************************************************//
		// DeleteConfirmed()	Acceso solo ADMINISTRADOR									*//
		// Acción que devuelve la vista que permite elimininar una causa movimiento			*//
		// especificado.  Método POST.														*//
		// _________________________________________________________________________________*//
		// Entrada: 																		*//
		// •	id: identificador de la causa movimiento que va a eliminar.					*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que muestra la eliminación de la causa movimiento desada.			*//
		// _________________________________________________________________________________*//
        [Authorize(Roles = "Admin")]
        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {            
            CausaMovimiento causamovimiento = db.CausaMovimientoes.Find(id);
            db.CausaMovimientoes.Remove(causamovimiento);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}